'use strict';

/*
 *  集团/校区管理
 */ 
const mongoose = require('mongoose');
const classroomModel = require('../models/classroom.model');
const classgroupModel = require('../models/classgroup.model');
const classcampusModel = require('../models/classcampus.model');

const ipcModel = require('../models/ipc.model');
const httpUtil = require('../utils/http');
const Code = require('../common/error_code');
const Util = require('../utils/hobot_util');


// 校区列表
async function classcampus_list(ctx) {
    const params = ctx.request.body
    if(!params || typeof params !=='object') return ctx.error(Code.REQUEST_ERROR('请补充参数'))
    
    let cdt = {
    };
    if (params.group_name) {
        cdt.group_name = { $regex: params.group_name };
    }
    if (params.campus_name) {
        cdt.campus_name = { $regex: params.campus_name };
    }
    if (params.num) {
        cdt.num = { $regex: params.num };
    }
    const classcampus = await Util.pageQuery(params.page_num, params.page_size, classcampusModel,
        cdt, '', '', {_id: -1});
    ctx.success(Code.REQUEST_SUCCESS('查询成功'), {
        page_num: params.page_num,
        page_size: params.page_size,
        total: classcampus.total,
        result: classcampus.results
    });
}

// 添加校区
async function add_classcampus(ctx){
    const params = ctx.request.body
    try{
        if(!params || typeof params !=='object') return ctx.error(Code.REQUEST_ERROR('请补充参数'))
        if(!params.campus_id){
            return ctx.error(Code.REQUEST_ERROR('请填写校区id'))
        }
        if(!params.campus_name){
            return ctx.error(Code.REQUEST_ERROR('请填写校区名称'))
        }
        const campusParams = {
            campus_id: params.campus_id,
            campus_name:params.campus_name,
            secret:params.secret
        }
        const data = await classcampusModel.findOne({campus_id:params.campus_id})
        if(data){
            return ctx.error(Code.REQUEST_ERROR(`校区id：${params.campus_id}已添加，请重新输入`))
        }
        if(params.group_id){
            const classgroup = await classgroupModel.findById(params.group_id)
            if(!classgroup){
                return ctx.error(Code.REQUEST_ERROR('绑定的集团不存在'))
            }
            campusParams.group_id = params.group_id
            campusParams.group_name = classgroup.group_name
        }        
        await classcampusModel.create(campusParams)
        ctx.success(Code.REQUEST_SUCCESS('添加成功'))
    }catch(err){
        ctx.error(Code.REQUEST_ERROR('添加失败'))
    }
}

// 更新校区信息
async function update_classcampus(ctx){
    const params = ctx.request.body
    if(!params || typeof params !=='object') return ctx.error(Code.REQUEST_ERROR('请补充参数'))
    if(!params._id){
        return ctx.error(Code.REQUEST_ERROR('请选择要更新的校区'))
    }
    if(!params.campus_name){
        return ctx.error(Code.REQUEST_ERROR('请填写校区名称'))
    }
    const campus_name = params.campus_name
    const classcampus = await classcampusModel.findById(params._id)
    if(!classcampus){
        return ctx.error(Code.REQUEST_ERROR('该校区不存在'))
    }
    const data = await classcampusModel.findOne({
        campus_name:params.campus_name,
        _id:{
            $ne: params._id
        }
    })
    if(data){
        return ctx.error(Code.REQUEST_ERROR(`校区名称：${campus_name}已存在`))
    }
    await classcampusModel.findByIdAndUpdate(params._id, {
        campus_name:params.campus_name,
        secret:params.secret,
        access_token:'',
        token_type:'',
        expires_in:'',
        scope:''
    })
    ctx.success(Code.REQUEST_SUCCESS('更新成功'))
    await classroomModel.updateMany({
        campus_id:classcampus.campus_id,
    },{
        campus_name
    })
    await ipcModel.updateMany({
        campus_id:classcampus.campus_id,
    },{
        campus_name
    })
}

// 删除校区
async function delete_classcampus(ctx){
    const params = ctx.request.body
    try{
        if(!params || typeof params !=='object' || !params.campus_id) return ctx.error(Code.REQUEST_ERROR('请选择要删除的校区'))
        const roomData = await classroomModel.find({campus_id:params.campus_id})
        if(roomData&&roomData.length){
            return ctx.error(Code.REQUEST_ERROR('校区下存在绑定的教室无法直接删除'))
        }
        await classcampusModel.remove({campus_id:params.campus_id})
        return ctx.success(Code.REQUEST_SUCCESS('删除成功'))
    }catch(err){
        return ctx.error(Code.REQUEST_ERROR('删除失败'))
    }
}

exports.classcampus_list = classcampus_list
exports.add_classcampus = add_classcampus
exports.update_classcampus = update_classcampus
exports.delete_classcampus = delete_classcampus